﻿#pragma warning disable IDE1006
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace WUDI.ECharts.Timeline
{
	/// <summary>
	/// timeline 组件，提供了在多个 ECharts option 间进行切换、播放等操作的功能
	/// <para>
	/// baseOption 中，统一作为一个普通的组件看待
	/// </para>
	/// <para>
	/// 但是，仍然兼容 ECharts2 的 timeline 定义位置，只是不再推荐这样写
	/// </para>
	/// </summary>
	public class Timeline
	{

		/// <summary>
		/// 是否显示 timeline 组件。如果设置为false，不会显示，但是功能还存在。
		/// </summary>
		public dynamic show { get; set; }  = true;

		/// <summary>
		/// 这个属性目前只支持为 slider，不需要更改。
		/// </summary>
		public dynamic type { get; set; }  = "slider";

		/// <summary>
		/// value
		/// <para>
		/// 数值轴，适用于连续数据
		/// </para>
		/// <para>
		/// category
		/// </para>
		/// <para>
		/// 类目轴，适用于离散的类目数据
		/// </para>
		/// <para>
		/// time
		/// </para>
		/// <para>
		/// 时间轴，适用于连续的时序数据，与数值轴相比时间轴带有时间的格式化，在刻度计算上也有所不同，例如会根据跨度的范围来决定使用月，星期，日还是小时范围的刻度
		/// </para>
		/// </summary>
		public WUDI.ECharts.AxisType axisType { get; set; }  = WUDI.ECharts.AxisType.time;

		/// <summary>
		/// 表示当前选中项是哪项
		/// <para>
		/// 比如，currentIndex 为 0 时，表示当前选中项为 timeline.data[0]（即使用 options[0]）
		/// </para>
		/// </summary>
		public dynamic currentIndex { get; set; }  = 0;

		/// <summary>
		/// 表示是否自动播放。
		/// </summary>
		public dynamic autoPlay { get; set; }  = false;

		/// <summary>
		/// 表示是否反向播放。
		/// </summary>
		public dynamic rewind { get; set; }  = false;

		/// <summary>
		/// 表示是否循环播放。
		/// </summary>
		public dynamic loop { get; set; }  = true;

		/// <summary>
		/// 表示播放的速度（跳动的间隔），单位毫秒（ms）。
		/// </summary>
		public dynamic playInterval { get; set; }  = 2000;

		/// <summary>
		/// 拖动圆点的时候，是否实时更新视图。
		/// </summary>
		public dynamic realtime { get; set; }  = true;

		/// <summary>
		/// 表示『播放』按钮的位置。可选值。left、right。
		/// </summary>
		public dynamic controlPosition { get; set; }  = "left";

		/// <summary>
		/// 所有图形的 zlevel 值
		/// <para>
		/// zlevel用于 Canvas 分层，不同zlevel值的图形会放置在不同的 Canvas 中，Canvas 分层是一种常见的优化手段
		/// </para>
		/// <para>
		/// 我们可以把一些图形变化频繁（例如有动画）的组件设置成一个单独的zlevel
		/// </para>
		/// <para>
		/// 需要注意的是过多的 Canvas 会引起内存开销的增大，在手机端上需要谨慎使用以防崩溃
		/// </para>
		/// <para>
		/// zlevel 大的 Canvas 会放在 zlevel 小的 Canvas 的上面
		/// </para>
		/// </summary>
		public dynamic zlevel { get; set; }  = 0;

		/// <summary>
		/// 组件的所有图形的z值
		/// <para>
		/// 控制图形的前后顺序
		/// </para>
		/// <para>
		/// z值小的图形会被z值大的图形覆盖
		/// </para>
		/// <para>
		/// z相比zlevel优先级更低，而且不会创建新的 Canvas
		/// </para>
		/// </summary>
		public dynamic z { get; set; }  = 2;

		/// <summary>
		/// timeline组件离容器左侧的距离
		/// <para>
		/// left 的值可以是像 20 这样的具体像素值，可以是像 20% 这样相对于容器高宽的百分比，也可以是 left, center, right
		/// </para>
		/// <para>
		/// 如果 left 的值为left, center, right，组件会根据相应的位置自动对齐
		/// </para>
		/// </summary>
		public dynamic left { get; set; }  = "auto";

		/// <summary>
		/// timeline组件离容器上侧的距离
		/// <para>
		/// top 的值可以是像 20 这样的具体像素值，可以是像 20% 这样相对于容器高宽的百分比，也可以是 top, middle, bottom
		/// </para>
		/// <para>
		/// 如果 top 的值为top, middle, bottom，组件会根据相应的位置自动对齐
		/// </para>
		/// </summary>
		public dynamic top { get; set; }  = "auto";

		/// <summary>
		/// timeline组件离容器右侧的距离
		/// <para>
		/// right 的值可以是像 20 这样的具体像素值，可以是像 20% 这样相对于容器高宽的百分比
		/// </para>
		/// <para>
		/// 默认自适应
		/// </para>
		/// </summary>
		public dynamic right { get; set; }  = "auto";

		/// <summary>
		/// timeline组件离容器下侧的距离
		/// <para>
		/// bottom 的值可以是像 20 这样的具体像素值，可以是像 20% 这样相对于容器高宽的百分比
		/// </para>
		/// <para>
		/// 默认自适应
		/// </para>
		/// </summary>
		public dynamic bottom { get; set; }  = "auto";

		/// <summary>
		/// timeline内边距，单位px，默认各方向内边距为5，接受数组分别设定上右下左边距。
		/// <para>number/Array</para>
		/// </summary>
		public dynamic padding { get; set; }  = 5;

		/// <summary>
		/// vertical。竖直放置。
		/// horizontal。水平放置。
		/// </summary>
		public WUDI.ECharts.Orient orient { get; set; }  = WUDI.ECharts.Orient.horizontal;

		/// <summary>
		/// 是否反向放置 timeline，反向则首位颠倒过来。
		/// </summary>
		public dynamic inverse { get; set; }  = false;

		/// <summary>
		/// timeline标记的图形
		/// <para>
		/// ECharts 提供的标记类型包括
		/// </para>
		/// <para>
		/// circle, rect, roundRect, triangle, diamond, pin, arrow, none
		/// </para>
		/// <para>
		/// 可以通过 image://url 设置为图片，其中 URL 为图片的链接，或者 dataURI
		/// </para>
		/// <para>
		/// 可以通过 path:// 将图标设置为任意的矢量路径
		/// </para>
		/// <para>
		/// 这种方式相比于使用图片的方式，不用担心因为缩放而产生锯齿或模糊，而且可以设置为任意颜色
		/// </para>
		/// <para>
		/// 路径图形会自适应调整为合适的大小
		/// </para>
		/// <para>
		/// 路径的格式参见 SVG PathData
		/// </para>
		/// <para>
		/// <see href="http://www.w3.org/TR/SVG/paths.html#PathData"/>
		/// </para>
		/// <para>
		/// 可以从 Adobe Illustrator 等工具编辑导出
		/// </para>
		/// </summary>
		public dynamic symbol { get; set; }  = "emptyCircle";

		/// <summary>
		/// timeline标记的大小，可以设置成诸如 10 这样单一的数字，也可以用数组分开表示宽和高，例如 [20, 10] 表示标记宽为20，高为10。
		/// <para>number/Array</para>
		/// </summary>
		public dynamic symbolSize { get; set; }  = 10;

		/// <summary>
		/// timeline标记的旋转角度（而非弧度）
		/// <para>
		/// 正值表示逆时针旋转
		/// </para>
		/// <para>
		/// 注意在 markLine 中当 symbol 为 arrow 时会忽略 symbolRotate 强制设置为切线的角度
		/// </para>
		/// </summary>
		public dynamic symbolRotate { get; set; } 

		/// <summary>
		/// 如果 symbol 是 path:// 的形式，是否在缩放时保持该图形的长宽比。
		/// </summary>
		public dynamic symbolKeepAspect { get; set; }  = false;

		/// <summary>
		/// timeline标记相对于原本位置的偏移
		/// <para>
		/// 默认情况下，标记会居中置放在数据对应的位置，但是如果 symbol 是自定义的矢量路径或者图片，就有可能不希望 symbol 居中
		/// </para>
		/// <para>
		/// 这时候可以使用该配置项配置 symbol 相对于原本居中的偏移，可以是绝对的像素值，也可以是相对的百分比
		/// </para>
		/// </summary>
		public dynamic symbolOffset { get; set; }  = "[0, 0]";

		public WUDI.ECharts.Timeline.LineStyle lineStyle { get; set; } 

		/// <summary>
		/// 轴的文本标签
		/// <para>
		/// emphasis 是文本高亮的样式，比如鼠标悬浮或者图例联动高亮的时候会使用 emphasis 作为文本的样式
		/// </para>
		/// </summary>
		public WUDI.ECharts.Timeline.Label label { get; set; } 

		/// <summary>
		/// timeline  图形样式。
		/// </summary>
		public WUDI.ECharts.Timeline.ItemStyle itemStyle { get; set; } 

		/// <summary>
		/// 『当前项』（checkpoint）的图形样式。
		/// </summary>
		public WUDI.ECharts.Timeline.CheckpointStyle checkpointStyle { get; set; } 

		/// <summary>
		/// 『控制按钮』的样式。『控制按钮』包括。『播放按钮』、『前进按钮』、『后退按钮』。
		/// </summary>
		public WUDI.ECharts.Timeline.ControlStyle controlStyle { get; set; } 

		public WUDI.ECharts.Timeline.Emphasis.Emphasis emphasis { get; set; } 

		/// <summary>
		/// timeline 数据
		/// <para>
		/// Array 的每一项，可以是直接的数值
		/// </para>
		/// <para>
		/// 如果需要对每个数据项单独进行样式定义，则数据项写成 Object
		/// </para>
		/// <para>
		/// Object中，value属性为数值
		/// </para>
		/// <para>
		/// 其他属性如下例子，可以覆盖 timeline 中的属性配置
		/// </para>
		/// </summary>
		public dynamic data { get; set; } 

	}
}